Networking applications sometimes need to “multicast” communications to multiple destinations. Examples of such applications include audio/video conferencing applications, webcasting applications, etc. In such applications, source content (e.g., audio/video of a person speaking) needs to be transmitted to all of the participants of the networking application (i.e., of the meeting/webcast).
Because the Internet in general does not natively support multicasting, network applications achieve “multicasting” by sending the same content (e.g., audio, video and/or data) to each destination, i.e., by sending multiple “unicasts.” Consider the example of a Windows® Socket (winsock) send operation. When a networking application makes a call to the operating system through the winsock API, the following operations, among others, are performed as part of sending the content over the network:                1. Perform a lookup on the socket identifier (i.e., handle);        2. Transition from user-mode to kernel-mode;        3. Allocate a kernel-mode memory buffer and copy the content into it, or lock the application's send memory buffer into memory;        4. Pass the content to the underlying network transport (such as TCP/IP driver) for transmission over the network;        5. Signal completion of the send operation to the application; and        6. Transition back from kernel-mode to user-mode.        
If a multicast is being performed (i.e., by performing multiple unicasts), then, for each additional destination of the multicast, another call for a send operation will be sent from the networking application to the operating system, and steps 1-6 will be repeated. This redundancy causes significant CPU overhead for the sending application, and can limit the scalability of the application.